home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 1 / LSD Compendium Deluxe 1.iso / a / programming / c / dicepj20.lha / diceproject / sources / compileropt.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-06-16  |  18.9 KB  |  653 lines

  1. /*
  2.  *  Source machine generated by GadToolsBox V2.0
  3.  *  which is (c) Copyright 1991-1993 Jaba Development
  4.  *
  5.  *  GUI Designed by : Jan van den Baard
  6.  */
  7.  
  8. #include <exec/types.h>
  9. #include <intuition/intuition.h>
  10. #include <intuition/classes.h>
  11. #include <intuition/classusr.h>
  12. #include <intuition/imageclass.h>
  13. #include <intuition/gadgetclass.h>
  14. #include <libraries/gadtools.h>
  15. #include <graphics/displayinfo.h>
  16. #include <graphics/gfxbase.h>
  17. #include <clib/exec_protos.h>
  18. #include <clib/intuition_protos.h>
  19. #include <clib/gadtools_protos.h>
  20. #include <clib/graphics_protos.h>
  21. #include <clib/utility_protos.h>
  22. #include <string.h>
  23. #include <clib/diskfont_protos.h>
  24.  
  25. #include "compiler.h"
  26.  
  27. #include "project.h"
  28.  
  29. struct Window          *CompilerWnd = NULL;
  30. struct Window          *LinkerWnd = NULL;
  31. struct Gadget          *CompilerGList = NULL;
  32. struct Gadget          *LinkerGList = NULL;
  33. struct IntuiMessage    CompilerMsg;
  34. struct IntuiMessage    LinkerMsg;
  35. UWORD               CompilerZoom[4];
  36. UWORD               LinkerZoom[4];
  37. struct Gadget          *CompilerGadgets[15];
  38. struct Gadget          *LinkerGadgets[7];
  39. UWORD               CompilerLeft = 76;
  40. UWORD               CompilerTop = 146;
  41. UWORD               CompilerWidth = 547;
  42. UWORD               CompilerHeight = 259;
  43. UWORD               LinkerLeft = 183;
  44. UWORD               LinkerTop = 226;
  45. UWORD               LinkerWidth = 384;
  46. UWORD               LinkerHeight = 104;
  47. UBYTE              *CompilerWdt = (UBYTE *)"Project Handler : Compiler Options";
  48. UBYTE              *LinkerWdt = (UBYTE *)"Project Handler : Linker Options";
  49. struct Window          *GenOptWnd = NULL;
  50. struct Gadget          *GenOptGList = NULL;
  51. struct IntuiMessage    GenOptMsg;
  52. UWORD               GenOptZoom[4];
  53. struct Gadget          *GenOptGadgets[5];
  54. UWORD               GenOptLeft = 185;
  55. UWORD               GenOptTop = 150;
  56. UWORD               GenOptWidth = 335;
  57. UWORD               GenOptHeight = 88;
  58. UBYTE              *GenOptWdt = (UBYTE *)"Project Handler : Main Options";
  59.  
  60. UBYTE *Type1Labels[] = {
  61.     (UBYTE *)"Executable",
  62.     (UBYTE *)"Library",
  63.     (UBYTE *)"Romable",
  64.     NULL };
  65.  
  66. struct IntuiText GenOptIText[] = {
  67.     1, 0, JAM1,167, 49, NULL, (UBYTE *)".", NULL };
  68.  
  69. #define GenOpt_TNUM 1
  70.  
  71. UWORD GenOptGTypes[] = {
  72.     CYCLE_KIND,
  73.     SLIDER_KIND,
  74.     SLIDER_KIND
  75.     BUTTON_KIND,
  76.     BUTTON_KIND
  77. };
  78.  
  79. struct NewGadget GenOptNGad[] = {
  80.     155, 7, 164, 14, (UBYTE *)"Final Object _Type :", NULL, GD_Type, PLACETEXT_LEFT, NULL, (APTR)GenTypeClicked,
  81.     14, 42, 130, 15, (UBYTE *)"OS _Version", NULL, GD_Ver, PLACETEXT_ABOVE, NULL, (APTR)VerClicked,
  82.     191, 42, 130, 15, (UBYTE *)"OS _Revision", NULL, GD_Rev, PLACETEXT_ABOVE, NULL, (APTR)RevClicked
  83.     46, 66, 102, 14, NULL, NULL, GD_GenOptUse, PLACETEXT_IN, NULL, (APTR)GenOptUseClicked,
  84.     195, 66, 102, 14, NULL, NULL, GD_GenOptCancel, PLACETEXT_IN, NULL, (APTR)GenOptCancelClicked
  85. };
  86.  
  87. ULONG GenOptGTags[] = {
  88.     (GTCY_Labels), (ULONG)&Type1Labels[ 0 ], (GT_Underscore), '_', (TAG_DONE),
  89.     (GTSL_Min), 1, (GTSL_Max), 9, (GTSL_Level), 2, (GTSL_MaxLevelLen), 4, (GTSL_LevelFormat), (ULONG)"%2ld", (GTSL_LevelPlace), (PLACETEXT_RIGHT), (PGA_Freedom), LORIENT_HORIZ, (GA_RelVerify), TRUE, (GT_Underscore), '_', (TAG_DONE),
  90.     (GTSL_Max), 9, (GTSL_MaxLevelLen), 4, (GTSL_LevelFormat), (ULONG)"%2ld", (PGA_Freedom), LORIENT_HORIZ, (GA_RelVerify), TRUE, (GT_Underscore), '_', (TAG_DONE),
  91.     (GT_Underscore), '_', (TAG_DONE),
  92.     (GT_Underscore), '_', (TAG_DONE)
  93. };
  94.  
  95. UBYTE *CPU0Labels[] = {
  96.     (UBYTE *)"680_00/010",
  97.     (UBYTE *)"680_20",
  98.     (UBYTE *)"680_30",
  99.     NULL };
  100.  
  101. UBYTE *FPU0Labels[] = {
  102.     (UBYTE *)"_None",
  103.     (UBYTE *)"_68881",
  104.     (UBYTE *)"6_8882",
  105.     NULL };
  106.  
  107. UBYTE *Code0Labels[] = {
  108.     (UBYTE *)"_Small",
  109.     (UBYTE *)"_Large",
  110.     NULL };
  111.  
  112. UBYTE *Data0Labels[] = {
  113.     (UBYTE *)"S_mall",
  114.     (UBYTE *)"Larg_e",
  115.     NULL };
  116.  
  117. UBYTE *Calls0Labels[] = {
  118.     (UBYTE *)"_Registerized",
  119.     (UBYTE *)"_Trough Stack",
  120.     NULL };
  121.  
  122. UBYTE *HunkCode0Labels[] = {
  123.     (UBYTE *)"_Only constants",
  124.     (UBYTE *)"Bot_h constants and strings",
  125.     (UBYTE *)"Constant, string and _PC Relative",
  126.     NULL };
  127.  
  128. UBYTE *Profile0Labels[] = {
  129.     (UBYTE *)"Disable Profilin_g",
  130.     (UBYTE *)"Source code onl_y",
  131.     (UBYTE *)"Source code and all li_braries",
  132.     NULL };
  133.  
  134. struct IntuiText CompilerIText[] = {
  135.     2, 0, JAM2,100, 7, NULL, (UBYTE *)" Code Generation ", NULL,
  136.     2, 0, JAM2,242, 7, NULL, (UBYTE *)" Code Model ", NULL,
  137.     2, 0, JAM2,342, 7, NULL, (UBYTE *)" Data Model ", NULL,
  138.     2, 0, JAM2,465, 7, NULL, (UBYTE *)" Procedure Call ", NULL,
  139.     2, 0, JAM2,119, 79, NULL, (UBYTE *)" Constant Hunk Code Content ", NULL,
  140.     2, 0, JAM2,385, 79, NULL, (UBYTE *)" Profiling Options ", NULL,
  141.     2, 0, JAM2,250, 153, NULL, (UBYTE *)" Diverse Compiling Options ", NULL };
  142.  
  143. #define Compiler_TNUM 7
  144.  
  145. UWORD CompilerGTypes[] = {
  146.     MX_KIND,
  147.     MX_KIND,
  148.     MX_KIND,
  149.     MX_KIND,
  150.     MX_KIND,
  151.     MX_KIND,
  152.     CHECKBOX_KIND,
  153.     CHECKBOX_KIND,
  154.     CHECKBOX_KIND,
  155.     CHECKBOX_KIND,
  156.     CHECKBOX_KIND,
  157.     CHECKBOX_KIND,
  158.     MX_KIND,
  159.     BUTTON_KIND,
  160.     BUTTON_KIND
  161. };
  162.  
  163. UWORD LinkerGTypes[] = {
  164.     BUTTON_KIND,
  165.     BUTTON_KIND,
  166.     CHECKBOX_KIND,
  167.     CHECKBOX_KIND,
  168.     CHECKBOX_KIND,
  169.     CHECKBOX_KIND,
  170.     CHECKBOX_KIND
  171. };
  172.  
  173. struct NewGadget CompilerNGad[] = {
  174.     20, 19, 17, 9, NULL, NULL, GD_CPU, PLACETEXT_RIGHT, NULL, (APTR)CPUClicked,
  175.     117, 19, 17, 9, NULL, NULL, GD_FPU, PLACETEXT_RIGHT, NULL, (APTR)FPUClicked,
  176.     214, 27, 17, 9, NULL, NULL, GD_Code, PLACETEXT_RIGHT, NULL, (APTR)CodeClicked,
  177.     311, 27, 17, 9, NULL, NULL, GD_Data, PLACETEXT_RIGHT, NULL, (APTR)DataClicked,
  178.     408, 27, 17, 9, NULL, NULL, GD_Calls, PLACETEXT_RIGHT, NULL, (APTR)CallsClicked,
  179.     20, 91, 17, 9, NULL, NULL, GD_HunkCode, PLACETEXT_RIGHT, NULL, (APTR)HunkCodeClicked,
  180.     37, 163, 26, 11, (UBYTE *)"_Inline Library Calls", NULL, GD_Inline, PLACETEXT_RIGHT, NULL, (APTR)InlineClicked,
  181.     300, 205, 26, 11, (UBYTE *)"C_++ style comments ( // )", NULL, GD_Gadget70, PLACETEXT_RIGHT, NULL, (APTR)Gadget70Clicked,
  182.     37, 184, 26, 11, (UBYTE *)"Prevent unprototyped _function calls", NULL, GD_Proto, PLACETEXT_RIGHT, NULL, (APTR)ProtoClicked,
  183.     37, 205, 26, 11, (UBYTE *)"Exe_cutable Residentable", NULL, GD_Resident, PLACETEXT_RIGHT, NULL, (APTR)ResidentClicked,
  184.     300, 163, 26, 11, (UBYTE *)"Generate _dynamic stack", NULL, GD_Dynamic, PLACETEXT_RIGHT, NULL, (APTR)DynamicClicked,
  185.     300, 184, 26, 11, (UBYTE *)"Debug Level _1", NULL, GD_DebugL, PLACETEXT_RIGHT, NULL, (APTR)DebugLClicked,
  186.     288, 91, 17, 9, NULL, NULL, GD_Profile, PLACETEXT_RIGHT, NULL, (APTR)ProfileClicked,
  187.     93, 234, 120, 19,NULL , NULL, GD_Use, PLACETEXT_IN, NULL, (APTR)CompilerUseClicked,
  188.     333, 234, 120, 19,NULL, NULL, GD_Cancel, PLACETEXT_IN, NULL, (APTR)CompilerCancelClicked
  189. };
  190.  
  191. struct NewGadget LinkerNGad[] = {
  192.     13, 77, 120, 19, NULL, NULL, GD_Use, PLACETEXT_IN, NULL, (APTR)LinkerUseClicked,
  193.     253, 77, 120, 19, NULL, NULL, GD_Cancel, PLACETEXT_IN, NULL, (APTR)LinkerCancelClicked,
  194.     9, 7, 26, 11, (UBYTE *)"Force code in Ch_ip", NULL, GD_Chip, PLACETEXT_RIGHT, NULL, (APTR)ChipClicked,
  195.     9, 28, 26, 11, (UBYTE *)"Relocation _Hunks", NULL, GD_RelocHunk, PLACETEXT_RIGHT, NULL, (APTR)RelocHunkClicked,
  196.     9, 49, 26, 11, (UBYTE *)"Include _Debug Information", NULL, GD_DebugI, PLACETEXT_RIGHT, NULL, (APTR)DebugIClicked,
  197.     211, 7, 26, 11, (UBYTE *)"_Fragmented File", NULL, GD_Fragment, PLACETEXT_RIGHT, NULL, (APTR)FragmentClicked,
  198.     211, 28, 26, 11, (UBYTE *)"Use Unix _library", NULL, GD_UnixLib, PLACETEXT_RIGHT, NULL, (APTR)UnixLibClicked
  199. };
  200.  
  201. ULONG CompilerGTags[] = {
  202.     (GTMX_Labels), (ULONG)&CPU0Labels[ 0 ], (GT_Underscore), '_', (TAG_DONE),
  203.     (GTMX_Labels), (ULONG)&FPU0Labels[ 0 ], (GT_Underscore), '_', (TAG_DONE),
  204.     (GTMX_Labels), (ULONG)&Code0Labels[ 0 ], (GT_Underscore), '_', (TAG_DONE),
  205.     (GTMX_Labels), (ULONG)&Data0Labels[ 0 ], (GT_Underscore), '_', (TAG_DONE),
  206.     (GTMX_Labels), (ULONG)&Calls0Labels[ 0 ], (GT_Underscore), '_', (TAG_DONE),
  207.     (GTMX_Labels), (ULONG)&HunkCode0Labels[ 0 ], (GT_Underscore), '_', (TAG_DONE),
  208.     (GT_Underscore), '_', (TAG_DONE),
  209.     (GT_Underscore), '_', (TAG_DONE),
  210.     (GT_Underscore), '_', (TAG_DONE),
  211.     (GT_Underscore), '_', (TAG_DONE),
  212.     (GT_Underscore), '_', (TAG_DONE),
  213.     (GT_Underscore), '_', (TAG_DONE),
  214.     (GTMX_Labels), (ULONG)&Profile0Labels[ 0 ], (GT_Underscore), '_', (TAG_DONE),
  215.     (GT_Underscore), '_', (TAG_DONE),
  216.     (GT_Underscore), '_', (TAG_DONE)
  217. };
  218.  
  219. ULONG LinkerGTags[] = {
  220.     (GT_Underscore), '_', (TAG_DONE),
  221.     (GT_Underscore), '_', (TAG_DONE),
  222.     (GT_Underscore), '_', (TAG_DONE),
  223.     (GT_Underscore), '_', (TAG_DONE),
  224.     (GT_Underscore), '_', (TAG_DONE),
  225.     (GT_Underscore), '_', (TAG_DONE),
  226.     (GT_Underscore), '_', (TAG_DONE)
  227. };
  228.  
  229. void CompilerRender( void )
  230. {
  231.     struct IntuiText    it;
  232.     UWORD            cnt;
  233.  
  234.     ComputeFont( CompilerWidth, CompilerHeight );
  235.  
  236.     DrawBevelBox( CompilerWnd->RPort, OffX + ComputeX( 296 ),
  237.                     OffY + ComputeY( 7 ),
  238.                     ComputeX( 91 ),
  239.                     ComputeY( 62 ),
  240.                     GT_VisualInfo, VisualInfo, TAG_DONE );
  241.     DrawBevelBox( CompilerWnd->RPort, OffX + ComputeX( 198 ),
  242.                     OffY + ComputeY( 7 ),
  243.                     ComputeX( 91 ),
  244.                     ComputeY( 62 ),
  245.                     GT_VisualInfo, VisualInfo, TAG_DONE );
  246.     DrawBevelBox( CompilerWnd->RPort, OffX + ComputeX( 395 ),
  247.                     OffY + ComputeY( 7 ),
  248.                     ComputeX( 146 ),
  249.                     ComputeY( 62 ),
  250.                     GT_VisualInfo, VisualInfo, TAG_DONE );
  251.     DrawBevelBox( CompilerWnd->RPort, OffX + ComputeX( 6 ),
  252.                     OffY + ComputeY( 7 ),
  253.                     ComputeX( 186 ),
  254.                     ComputeY( 62 ),
  255.                     GT_VisualInfo, VisualInfo, TAG_DONE );
  256.     DrawBevelBox( CompilerWnd->RPort, OffX + ComputeX( 6 ),
  257.                     OffY + ComputeY( 79 ),
  258.                     ComputeX( 252 ),
  259.                     ComputeY( 62 ),
  260.                     GT_VisualInfo, VisualInfo, TAG_DONE );
  261.     DrawBevelBox( CompilerWnd->RPort, OffX + ComputeX( 262 ),
  262.                     OffY + ComputeY( 79 ),
  263.                     ComputeX( 279 ),
  264.                     ComputeY( 62 ),
  265.                     GT_VisualInfo, VisualInfo, TAG_DONE );
  266.     DrawBevelBox( CompilerWnd->RPort, OffX + ComputeX( 6 ),
  267.                     OffY + ComputeY( 153 ),
  268.                     ComputeX( 535 ),
  269.                     ComputeY( 75 ),
  270.                     GT_VisualInfo, VisualInfo, TAG_DONE );
  271.  
  272.     for ( cnt = 0; cnt < Compiler_TNUM; cnt++ ) {
  273.         CopyMem(( char * )&CompilerIText[ cnt ], ( char * )&it, (long)sizeof( struct IntuiText ));
  274.         it.ITextFont = Font;
  275.         it.LeftEdge  = OffX + ComputeX( it.LeftEdge ) - ( IntuiTextLength( &it ) >> 1 );
  276.         it.TopEdge   = OffY + ComputeY( it.TopEdge ) - ( Font->ta_YSize >> 1 );
  277.         PrintIText( CompilerWnd->RPort, &it, 0, 0 );
  278.     }
  279. }
  280.  
  281. int HandleCompilerIDCMP( void )
  282. {
  283.     struct IntuiMessage    *m;
  284.     int            (*func)(void);
  285.     BOOL            running = TRUE;
  286.  
  287.     while( (CompilerWnd != NULL) && (m = GT_GetIMsg( CompilerWnd->UserPort )) ) {
  288.  
  289.         CopyMem(( char * )m, ( char * )&CompilerMsg, (long)sizeof( struct IntuiMessage ));
  290.  
  291.         GT_ReplyIMsg( m );
  292.  
  293.         switch ( CompilerMsg.Class ) {
  294.  
  295.             case    IDCMP_REFRESHWINDOW:
  296.                 GT_BeginRefresh( CompilerWnd );
  297.                 CompilerRender();
  298.                 GT_EndRefresh( CompilerWnd, TRUE );
  299.                 break;
  300.  
  301.             case    IDCMP_GADGETUP:
  302.             case    IDCMP_GADGETDOWN:
  303.                 func = ( void * )(( struct Gadget * )CompilerMsg.IAddress )->UserData;
  304.                 running = func();
  305.                 break;
  306.             case    IDCMP_VANILLAKEY:
  307.                 CompilerVanillaKey( CompilerMsg.Code );
  308.                 break;
  309.             case    IDCMP_RAWKEY:
  310.                 if ( CompilerMsg.Code == 95 )
  311.                     ChargeAide( "WIN_Compiler" );
  312.         }
  313.     }
  314.     return( running );
  315. }
  316.  
  317. int OpenCompilerWindow( void )
  318. {
  319.     struct NewGadget    ng;
  320.     struct Gadget    *g;
  321.     UWORD        lc, tc;
  322.     UWORD        wleft = CompilerLeft, wtop = CompilerTop, ww, wh;
  323.  
  324.     ComputeFont( CompilerWidth, CompilerHeight );
  325.  
  326.     ww = ComputeX( CompilerWidth );
  327.     wh = ComputeY( CompilerHeight );
  328.  
  329.     if (( wleft + ww + OffX + Scr->WBorRight ) > Scr->Width ) wleft = Scr->Width - ww;
  330.     if (( wtop + wh + OffY + Scr->WBorBottom ) > Scr->Height ) wtop = Scr->Height - wh;
  331.  
  332.     if ( ! ( g = CreateContext( &CompilerGList )))
  333.         return( 1L );
  334.  
  335.     for( lc = 0, tc = 0; lc < Compiler_CNT; lc++ ) {
  336.  
  337.         CopyMem((char * )&CompilerNGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  338.  
  339.         ng.ng_VisualInfo = VisualInfo;
  340.         ng.ng_TextAttr     = Font;
  341.         ng.ng_LeftEdge     = OffX + ComputeX( ng.ng_LeftEdge );
  342.         ng.ng_TopEdge     = OffY + ComputeY( ng.ng_TopEdge );
  343.         ng.ng_Width     = ComputeX( ng.ng_Width );
  344.         ng.ng_Height     = ComputeY( ng.ng_Height);
  345.  
  346.         CompilerGadgets[ lc ] = g = CreateGadgetA((ULONG)CompilerGTypes[ lc ], g, &ng, ( struct TagItem * )&CompilerGTags[ tc ] );
  347.  
  348.         while( CompilerGTags[ tc ] ) tc += 2;
  349.         tc++;
  350.  
  351.         if ( NOT g )
  352.             return( 2L );
  353.     }
  354.  
  355.     CompilerZoom[0] = CompilerLeft;
  356.     CompilerZoom[1] = CompilerTop;
  357.     CompilerZoom[2] = TextLength( &Scr->RastPort, (UBYTE *)CompilerWdt, strlen((char *)CompilerWdt )) + 80;
  358.     CompilerZoom[3] = Scr->WBorTop + Scr->RastPort.TxHeight + 1;
  359.  
  360.     if ( ! ( CompilerWnd = OpenWindowTags( NULL,
  361.                 WA_Left,    wleft,
  362.                 WA_Top,     wtop,
  363.                 WA_Width,    ww + OffX + Scr->WBorRight,
  364.                 WA_Height,    wh + OffY + Scr->WBorBottom,
  365.                 WA_IDCMP,    MXIDCMP|CHECKBOXIDCMP|BUTTONIDCMP|IDCMP_REFRESHWINDOW|IDCMP_VANILLAKEY|IDCMP_RAWKEY,
  366.                 WA_Flags,    WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_SMART_REFRESH|WFLG_ACTIVATE,
  367.                 WA_Gadgets,    CompilerGList,
  368.                 WA_Title,    CompilerWdt,
  369.                 WA_PubScreen,    Scr,
  370.                 WA_Zoom,    CompilerZoom,
  371.                 WA_Activate,    TRUE,
  372.                 TAG_DONE )))
  373.     return( 4L );
  374.  
  375.     GT_RefreshWindow( CompilerWnd, NULL );
  376.  
  377.     if ( ROMVersion >= 39 )
  378.         LendMenus( CompilerWnd , ProjectWnd );
  379.     CompilerRender();
  380.  
  381.     return( 0L );
  382. }
  383.  
  384. void CloseCompilerWindow( void )
  385. {
  386.     if ( CompilerWnd        ) {
  387.         CloseWindow( CompilerWnd );
  388.         CompilerWnd = NULL;
  389.     }
  390.  
  391.     if ( CompilerGList      ) {
  392.         FreeGadgets( CompilerGList );
  393.         CompilerGList = NULL;
  394.     }
  395.  
  396. }
  397.  
  398. int HandleLinkerIDCMP( void )
  399. {
  400.     struct IntuiMessage    *m;
  401.     int            (*func)(void);
  402.     BOOL            running = TRUE;
  403.  
  404.     while( (LinkerWnd != NULL ) && (m = GT_GetIMsg( LinkerWnd->UserPort )) ) {
  405.  
  406.         CopyMem(( char * )m, ( char * )&LinkerMsg, (long)sizeof( struct IntuiMessage ));
  407.  
  408.         GT_ReplyIMsg( m );
  409.  
  410.         switch ( LinkerMsg.Class ) {
  411.  
  412.             case    IDCMP_REFRESHWINDOW:
  413.                 GT_BeginRefresh( LinkerWnd );
  414.                 GT_EndRefresh( LinkerWnd, TRUE );
  415.                 break;
  416.  
  417.             case    IDCMP_GADGETUP:
  418.                 func = ( void * )(( struct Gadget * )LinkerMsg.IAddress )->UserData;
  419.                 running = func();
  420.                 break;
  421.             case    IDCMP_VANILLAKEY:
  422.                 running = LinkerVanillaKey( LinkerMsg.Code );
  423.                 break;
  424.             case    IDCMP_RAWKEY:
  425.                 if ( LinkerMsg.Code == 95 )
  426.                     ChargeAide( "WIN_Linker" );
  427.                 break;
  428.         }
  429.     }
  430.     return( running );
  431. }
  432.  
  433. int OpenLinkerWindow( void )
  434. {
  435.     struct NewGadget    ng;
  436.     struct Gadget    *g;
  437.     UWORD        lc, tc;
  438.     UWORD        wleft = LinkerLeft, wtop = LinkerTop, ww, wh;
  439.  
  440.     ComputeFont( LinkerWidth, LinkerHeight );
  441.  
  442.     ww = ComputeX( LinkerWidth );
  443.     wh = ComputeY( LinkerHeight );
  444.  
  445.     if (( wleft + ww + OffX + Scr->WBorRight ) > Scr->Width ) wleft = Scr->Width - ww;
  446.     if (( wtop + wh + OffY + Scr->WBorBottom ) > Scr->Height ) wtop = Scr->Height - wh;
  447.  
  448.     if ( ! ( g = CreateContext( &LinkerGList )))
  449.         return( 1L );
  450.  
  451.     for( lc = 0, tc = 0; lc < Linker_CNT; lc++ ) {
  452.  
  453.         CopyMem((char * )&LinkerNGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  454.  
  455.         ng.ng_VisualInfo = VisualInfo;
  456.         ng.ng_TextAttr     = Font;
  457.         ng.ng_LeftEdge     = OffX + ComputeX( ng.ng_LeftEdge );
  458.         ng.ng_TopEdge     = OffY + ComputeY( ng.ng_TopEdge );
  459.         ng.ng_Width     = ComputeX( ng.ng_Width );
  460.         ng.ng_Height     = ComputeY( ng.ng_Height);
  461.  
  462.         LinkerGadgets[ lc ] = g = CreateGadgetA((ULONG)LinkerGTypes[ lc ], g, &ng, ( struct TagItem * )&LinkerGTags[ tc ] );
  463.  
  464.         while( LinkerGTags[ tc ] ) tc += 2;
  465.         tc++;
  466.  
  467.         if ( NOT g )
  468.             return( 2L );
  469.     }
  470.  
  471.     LinkerZoom[0] = LinkerLeft;
  472.     LinkerZoom[1] = LinkerTop;
  473.     LinkerZoom[2] = TextLength( &Scr->RastPort, (UBYTE *)LinkerWdt, strlen((char *)LinkerWdt )) + 80;
  474.     LinkerZoom[3] = Scr->WBorTop + Scr->RastPort.TxHeight + 1;
  475.  
  476.     if ( ! ( LinkerWnd = OpenWindowTags( NULL,
  477.                 WA_Left,    wleft,
  478.                 WA_Top,     wtop,
  479.                 WA_Width,    ww + OffX + Scr->WBorRight,
  480.                 WA_Height,    wh + OffY + Scr->WBorBottom,
  481.                 WA_IDCMP,    BUTTONIDCMP|CHECKBOXIDCMP|IDCMP_REFRESHWINDOW|IDCMP_VANILLAKEY|IDCMP_MENUPICK|IDCMP_RAWKEY,
  482.                 WA_Flags,    WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_SIZEBBOTTOM,
  483.                 WA_Gadgets,    LinkerGList,
  484.                 WA_Title,    LinkerWdt,
  485.                 WA_PubScreen,    Scr,
  486.                 WA_Zoom,    LinkerZoom,
  487.                 WA_Activate,    TRUE,
  488.                 TAG_DONE )))
  489.     return( 4L );
  490.  
  491.     GT_RefreshWindow( LinkerWnd, NULL );
  492.  
  493.     if ( ROMVersion >= 39 )
  494.         LendMenus( LinkerWnd , ProjectWnd );
  495.  
  496.     return( 0L );
  497. }
  498.  
  499. void CloseLinkerWindow( void )
  500. {
  501.     if ( LinkerWnd        ) {
  502.         CloseWindow( LinkerWnd );
  503.         LinkerWnd = NULL;
  504.     }
  505.  
  506.     if ( LinkerGList      ) {
  507.         FreeGadgets( LinkerGList );
  508.         LinkerGList = NULL;
  509.     }
  510. }
  511.  
  512. void GenOptRender( void )
  513. {
  514.     struct IntuiText    it;
  515.     UWORD            cnt;
  516.  
  517.     ComputeFont( GenOptWidth, GenOptHeight );
  518.  
  519.  
  520.     for ( cnt = 0; cnt < GenOpt_TNUM; cnt++ ) {
  521.         CopyMem(( char * )&GenOptIText[ cnt ], ( char * )&it, (long)sizeof( struct IntuiText ));
  522.         it.ITextFont = Font;
  523.         it.LeftEdge  = OffX + ComputeX( it.LeftEdge ) - ( IntuiTextLength( &it ) >> 1 );
  524.         it.TopEdge   = OffY + ComputeY( it.TopEdge ) - ( Font->ta_YSize >> 1 );
  525.         PrintIText( GenOptWnd->RPort, &it, 0, 0 );
  526.     }
  527. }
  528.  
  529. int HandleGenOptIDCMP( void )
  530. {
  531.     struct IntuiMessage    *m;
  532.     int            (*func)(void);
  533.     BOOL            running = TRUE;
  534.  
  535.     while( (GenOptWnd != NULL) && (m = GT_GetIMsg( GenOptWnd->UserPort) ) ) {
  536.  
  537.         CopyMem(( char * )m, ( char * )&GenOptMsg, (long)sizeof( struct IntuiMessage ));
  538.  
  539.         GT_ReplyIMsg( m );
  540.  
  541.         switch ( GenOptMsg.Class ) {
  542.  
  543.             case    IDCMP_REFRESHWINDOW:
  544.                 GT_BeginRefresh( GenOptWnd );
  545.                 GenOptRender();
  546.                 GT_EndRefresh( GenOptWnd, TRUE );
  547.                 break;
  548.  
  549.             case    IDCMP_VANILLAKEY:
  550.                 running = GenOptVanillaKey();
  551.                 break;
  552.  
  553.             case    IDCMP_RAWKEY:
  554.                 if ( GenOptMsg.Code == 95 )
  555.                     ChargeAide( "WIN_MainOpt" );
  556.                 break;
  557.  
  558.             case    IDCMP_MOUSEMOVE:
  559.             case    IDCMP_GADGETUP:
  560.             case    IDCMP_GADGETDOWN:
  561.                 func = ( void * )(( struct Gadget * )GenOptMsg.IAddress )->UserData;
  562.                 running = func();
  563.                 break;
  564.         }
  565.     }
  566.     return( running );
  567. }
  568.  
  569. int OpenGenOptWindow( void )
  570. {
  571.     struct NewGadget    ng;
  572.     struct Gadget    *g;
  573.     UWORD        lc, tc;
  574.     UWORD        wleft = GenOptLeft, wtop = GenOptTop, ww, wh;
  575.  
  576.     ComputeFont( GenOptWidth, GenOptHeight );
  577.  
  578.     ww = ComputeX( GenOptWidth );
  579.     wh = ComputeY( GenOptHeight );
  580.  
  581.     if (( wleft + ww + OffX + Scr->WBorRight ) > Scr->Width ) wleft = Scr->Width - ww;
  582.     if (( wtop + wh + OffY + Scr->WBorBottom ) > Scr->Height ) wtop = Scr->Height - wh;
  583.  
  584.     if ( ! ( g = CreateContext( &GenOptGList )))
  585.         return( 1L );
  586.  
  587.     for( lc = 0, tc = 0; lc < GenOpt_CNT; lc++ ) {
  588.  
  589.         CopyMem((char * )&GenOptNGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  590.  
  591.         ng.ng_VisualInfo = VisualInfo;
  592.         ng.ng_TextAttr     = Font;
  593.         ng.ng_LeftEdge     = OffX + ComputeX( ng.ng_LeftEdge );
  594.         ng.ng_TopEdge     = OffY + ComputeY( ng.ng_TopEdge );
  595.         ng.ng_Width     = ComputeX( ng.ng_Width );
  596.         ng.ng_Height     = ComputeY( ng.ng_Height);
  597.  
  598.         GenOptGadgets[ lc ] = g = CreateGadgetA((ULONG)GenOptGTypes[ lc ], g, &ng, ( struct TagItem * )&GenOptGTags[ tc ] );
  599.  
  600.         while( GenOptGTags[ tc ] ) tc += 2;
  601.         tc++;
  602.  
  603.         if ( NOT g )
  604.             return( 2L );
  605.     }
  606.  
  607.     GenOptZoom[0] = GenOptLeft;
  608.     GenOptZoom[1] = GenOptTop;
  609.     if ( GenOptWdt )
  610.         GenOptZoom[2] = TextLength( &Scr->RastPort, (UBYTE *)GenOptWdt, strlen((char *)GenOptWdt )) + 80;
  611.     else
  612.         GenOptZoom[2]  = 80L;
  613.         GenOptZoom[3] = Scr->WBorTop + Scr->RastPort.TxHeight + 1;
  614.  
  615.     if ( ! ( GenOptWnd = OpenWindowTags( NULL,
  616.                 WA_Left,    wleft,
  617.                 WA_Top,     wtop,
  618.                 WA_Width,    ww + OffX + Scr->WBorRight,
  619.                 WA_Height,    wh + OffY + Scr->WBorBottom,
  620.                 WA_IDCMP,    CYCLEIDCMP|SLIDERIDCMP|IDCMP_VANILLAKEY|IDCMP_REFRESHWINDOW|IDCMP_MOUSEMOVE|IDCMP_RAWKEY,
  621.                 WA_Flags,    WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_SMART_REFRESH,
  622.                 WA_Gadgets,    GenOptGList,
  623.                 WA_Title,    GenOptWdt,
  624.                 WA_PubScreen,    Scr,
  625.                 WA_Activate,    TRUE,
  626.                 WA_Zoom,    GenOptZoom,
  627.                 WA_AutoAdjust,    TRUE,
  628.                 TAG_DONE )))
  629.     return( 4L );
  630.  
  631.     GT_RefreshWindow( GenOptWnd, NULL );
  632.  
  633.     if ( ROMVersion >= 39 )
  634.         LendMenus( GenOptWnd , ProjectWnd );
  635.  
  636.     GenOptRender();
  637.  
  638.     return( 0L );
  639. }
  640.  
  641. void CloseGenOptWindow( void )
  642. {
  643.     if ( GenOptWnd        ) {
  644.     CloseWindow( GenOptWnd );
  645.     GenOptWnd = NULL;
  646.     }
  647.     if ( GenOptGList      ) {
  648.     FreeGadgets( GenOptGList );
  649.     GenOptGList = NULL;
  650.     }
  651. }
  652.  
  653.